perm filename MPRZ.F4[RST,LCS] blob
sn#233044 filedate 1976-08-22 generic text, type T, neo UTF8
00100 C MPRNT.F4********** DRAWS MUSIC ON THE PLOTTER OR XGP **********
00200 C *** READS DATA FROM DSK FOR VARIOUS THINGS.
00300
00400 COMMON /DL/IXRX,SAVER,NAME /FRMT/F78F(1),FA1(1),FA5(1),ASK
00500 COMMON R2,JA,CENTR,J2,RJQ(20),JQ(20)
00600 C ↓↓↓↓↓ V IS FOR READIN ONLY
00700 COMMON /XRN/RN(3000),V(1000) /ALF/INP(72),ML
00800 1 /STF/RSTFAC(-3/4),RSTJ2 /POSI/STFF(-3/4),JJ2,POS
00900 1 /PTR/PWDS(250),ITEM,L,I,M /DPY/GO,TOP,BOT /FONT/JFONT
01000 1/PLTR/PLT,RHT,DIS
01100
01200 CALL SEGFIX
01300 C TO ENABLE MULTIPLE USE OF UPPER SEGMENT (TVR)
01400 CALL MPRFAI
01500 END
01600
01700 C***** SOME TYPEOUT AND ACCEPT ROUTINES *******
01800
01900 SUBROUTINE ENDIT(A,ITMS)
02000 TYPE 300,A,ITMS
02100 CALL PLOT(0,0,99)
02200 C THE END OF THE DATA
02300 300 FORMAT(F7.2,' INCHES',I,' ITEMS')
02400 C THE END OF THE DATA
02500 END
02600
02700 SUBROUTINE ILLEGL(JA)
02800 TYPE 160,JA
02900 160 FORMAT(' ILLEGAL STAFF# ',I4)
03000 END
03100
03200 SUBROUTINE UNKNWN(JA)
03300 TYPE 5700,JA
03400 5700 FORMAT(' UNKNOWN CODE=',I3)
03500 C TRAP FOR UNKNOWN CODE #S (SUCH AS 99 - FOR "NO KSIG".
03600 END
03700
03800 SUBROUTINE TOOMCH(K)
03900 TYPE 4202,K
04000 STOP
04100 4202 FORMAT(' ***** TOO MUCH DATA ',I4,'/2000')
04200 END
04300
04400 CCCCCCCCCCCCCCCCCCC SUBRS. SLUR, PLTSRT, (LINES, RDRAW),PLTCMD
04500
04600 SUBROUTINE SLUR
04700 IMPLICIT INTEGER(A-Q,T-Z)
04800 COMMON/SLR/ SLURX(72) /ALF/INP,SLURY(72)
04900 REAL CENTR
05000 COMMON /PLTR/PLT,RHT,RDIS
05100 COMMON R2,JA,CENTR,J2,R3,R4,R5,R6,R7,R8,R9,R10,RA,RB,
05200 1 K,KQ,TWICE,RST7,RX,RXX,RTILT,RC,RZ,RW,J3,J4,
05300 1 J5,J6,J7,J8,J9,J10,J11,JQ(7),R,RJ
05400 COMMON/PTR/PWDS(250),ITEM,L,I,IX /STF/RSTFAC(-3/4),RSTJ2
05500 CF DATA RZZ/2.8/
05600 C DEFAULT VALUE OF SLUR CURVE FACTOR IS 2.8
05700
05800 IF(JA.NE.12)GO TO 2
05900 CF RA=5.96*RSJT2*R5
06000 CF L=3
06100 CF J8=J8*RDIS
06200 CF IF(J7.LE.J6)J7=J7+360
06300 CF KQ=6
06400 CF IF(PLT)KQ=1
06500 CF10 DO 3 K=J6,J7,KQ
06600 CF R=K
06700 CF CALL LINES(R3+RA*SIND(R),CENTR+RA*COSD(R),L)
06800 CF3 L=2
06900 CF J8=J8-1
07000 CF IF(J8)RETURN
07100 CF RA=RA+1/RDIS
07200 CF L=3
07300 CF GO TO 10
07400 CJA=12 DRAWS CIRCLES. P5=RADIUS, P6=DEGR.1, P7=DEGR.2,P8=THICK(EXPANDS
07500 CALL CIRCLE
07600 RETURN
07700
07800 2 J10=1
07900 J4=-1
08000 KQ=6
08100 TWICE=-1
08200 C -1 FOR DISPLAY, USES ONLY 1/3 OF SEGMENTS
08300 IF(PLT.GE.0)GO TO 21
08400 TWICE=0
08500 KQ=1
08600 RWID=.2
08700 IF(RHT.LT.2)GO TO 21
08800 TWICE=1
08900 RWID=.14
09000 C IF SIZE IS GT.2 3 SLURS ARE DRAWN
09100 21 RST7=RSTJ2*7.
09200 RQQ=R5-R4
09300 IF(R6.GT.1000)CALL RNOTE(R6)
09400 GO TO (5,6,7),J8+4
09500 GO TO 4
09600 5 R=32
09700 C AFTER DOTTED NOTE
09800 GO TO 8
09900 6 R=22
10000 C BETWEEN NOTES
10100 8 RX=-1.3
10200 GO TO 9
10300 7 R=7
10400 RX=RSTJ2
10500 9 CALL RJBX(R)
10600 R6=R6+RX
10700 4 RXX=RHORZ(R6)-R3
10800 RTILT=RQQ*RST7
10900 80 RX=SQRT(RXX**2+RTILT**2)
11000 IF(J8.NE.-1)GO TO 10
11100 IF(RQQ.GT.8)RQQ=8
11200 IF(RQQ.LT.-8)RQQ=-8
11300 RQQ=RQQ*RSTFAC(J2)*1.0
11400 IF(R7)RQQ=-RQQ
11500 R3=R3-RQQ
11600 C MOVES STEEP SLUR LEFT OR RIGHT IF P8=-1
11700 10 RJ=ABS(R7)
11800 C R7+100=LEFT HALF SLUR, +200=RIGHT HALF, +300=REVERSE DIRECTION.(300 NOT DONE)
11900 IF(RJ.LT.100)RJ=-1
12000 IF(RJ.GE.300)RJ=0
12100 R7=AMOD(R7,100.0)
12200 1 R=CENTR
12300 IF(J8.GT.0)GO TO 180
12400 L=72
12500 C FOR BRACKETS
12600 CALL SLOOP
12700 CF RB=RX/71.
12800 CF DO 81 K=0,71
12900 CF81 SLURX(K+1)=RB*(K)+R3
13000 CF RA=R7*RST7
13100 CF41 IF(R9.EQ.0)R9=RZZ
13200 CF R=R+RA
13300 CF L=0
13400 CF DO 40 K=36,1,-1
13500 CF L=L+1
13600 CF RW=R-RA*(K/36.)**R9
13700 CF SLURY(L)=RW
13800 CF40 SLURY(73-L)=RW
13900 CF L=72
14000
14100 CF89 IF(RTILT.EQ.0)GO TO 87
14200 CF RW=ATAN2(RTILT,RXX)
14300 CF RA=SIN(RW)
14400 CF RB=COS(RW)
14500 CF RZ=SLURX(1)
14600 CF RW=SLURY(1)
14700 CF DO 83 K=1,L
14800 CF R=SLURX(K)-RZ
14900 CF RXX=SLURY(K)-RW
15000 CF SLURX(K)=RB*R-RA*RXX+RZ
15100 CF83 SLURY(K)=RB*RXX+RA*R+RW
15200
15300 87 IF(J4)CALL LINES(SLURX(J10),SLURY(J10),3)
15400 J5=KQ
15500 J6=J10
15600 J7=L
15700 IF(J4.NE.0)GO TO 22
15800 CALL EXCH(J6,J7)
15900 J5=-1
16000 22 DO 88 K=J6,J7,J5
16100 88 CALL LINES(SLURX(K),SLURY(K),2)
16200 IF(TWICE)RETURN
16300 TWICE=TWICE-1
16400 IF(J8.GT.0)GO TO 182
16500 J4=J4+1
16600 R7=R7+RWID
16700 C RWID=WIDTH OF SLUR -- SEE DATA
16800 GO TO 1
16900 180 RW=R+R7*RST7
17000 TWICE=-1
17100 KQ=1
17200 RX=RX+R3
17300 CC RA=(R5-R4)*RST7
17400 IF(J9.EQ.0)GO TO 181
17500 TWICE=2
17600 RZ=RTILT/(RX-R3)
17700 RXX=RX
17800 RWID=(R3+RXX)/2.
17900 182 IF(TWICE.EQ.1)GO TO 183
18000 C DOES LEFT SIDE FIRST.
18100 IF(TWICE.EQ.0)GO TO 184
18200 C LAST IS NUMBER.
18300 J8=2
18400 RC=RSTJ2*13.
18500 RX=RWID-RC
18600 RWW=RTILT
18700 185 RTILT=RZ*(RX-R3)
18800
18900 C PUT IN FUNC. HERE FOR THIS SLOPE AND FOR PART. BEAMS.
19000
19100 GO TO 181
19200 183 J8=3
19300 RX=RXX
19400 RTILT=RWW
19500 RXX=R3
19600 R3=RWID+RC
19700 RXX=RZ*(R3-RXX)
19800 R=R+RXX
19900 RW=RW+RXX
20000 GO TO 185
20100
20200 181 SLURX(1)=R3
20300 SLURY(1)=R
20400 SLURX(2)=R3
20500 SLURY(2)=RW
20600 SLURX(3)=RX
20700 SLURY(3)=RW+RTILT
20800 SLURX(4)=RX
20900 SLURY(4)=R+RTILT
21000 L=4
21100 IF(J8.EQ.2)L=3
21200 IF(J8.EQ.3)J10=2
21300 CC TWICE=-1
21400 GO TO 87
21500 184 J3=RWID
21600 C PUT IN VERT. POS. WHEN SLOPE!
21700 R4=RQQ/2.+R4+R7-1.
21800 R6=1.
21900 R7=1.
22000 R8=0
22100 CALL MAKNUM(R9)
22200 END
22300 C 8, POS1, STF, NT1, NT2, POS2, DIP(ABS. UNITS), P8
22400 C FOR P8: 0= SLUR, 1=BRACKETS, 2=LFT ONLY, 3=RT ONLY
22500
22600
22700 SUBROUTINE PLTSRT
22800 C SORTS DATA TO SHORTEN INVISIBLE VECTORS WHEN PLOTTING.
22900 CF IMPLICIT INTEGER(S-Z)
23000 COMMON /XRN/RN(4000) /PTR/PWDS(250),ITEM,L,I,IX
23100 DIMENSION P(250)
23200 CALL PSRT(P)
23300 END
23400
23500 CF DO 4 K=1,ITEM
23600 CF L=PWDS(K)
23700 CF LL=PWDS(K-1)
23800 CF LM=PWDS(K+1)
23900 CF A=RN(L+3)
24000 CF P(K)=A+1000*RN(L+2)
24100 CF IF(RN(L+1).NE.16)GO TO 40
24200 CF Y=PWDS(K-1)
24300 CF V=PWDS(K+1)
24400 CF IF(RN(Y+1).EQ.16)GO TO 41
24500 CF IF(RN(V+1).EQ.16)GO TO 41
24600 CF GO TO 4
24700 CF40 IF(A.GE.0)GO TO 4
24800 CF41 P(K)=-10000
24900 CF4 CONTINUE
25000 C PLOTS ALL NEG. POSITIONS FIRST.
25100 CF IX=I
25200 CF IF(I.LT.1500)I=1500
25300 CF Y=I
25400 CF I=I+IX-1
25500 CF IX=Y
25600 C IX IS M IN MAIN PROG.
25700 C LEAVES 1500 WDS IN RN FOR STORING "NOIR" DATA.
25800 CF2 A=P(1)
25900 CF L=1
26000 CF DO 1 K=1,ITEM
26100 CF IF(A.LE.P(K))GO TO 1
26200 CF A=P(K)
26300 CF L=K
26400 CF1 CONTINUE
26500 CF IF(A.EQ.10000.)RETURN
26600 C ALL ITEMS HAVE NOW BEEN SHUFFLED
26700 CF V=PWDS(L)
26800 CF P(L)=10000
26900 CF L=RN(V)+2+Y
27000 CF V=V-Y
27100 CC CALL LOOP(0,L,1,Y,V,RN)
27200 CF DO 3 K=Y,L
27300 CF3 RN(K)=RN(K+V)
27400 C REPLACED SUBROUTINE LOOP
27500 CF Y=L+1
27600 CF GO TO 2
27700 CF END
27800
27900
28000 CX SUBROUTINE LINES(A,B,L)
28100 CX COMMON /FL/IC,NZ,NX,RZ,XGP
28200 CX COMMON/DL/IIII,SAVER,AA /PLTR/IPLT,RHT,DIS
28300 CX COMMON R2,JA,CENTR,J2,RJQ(20),JQ(20)
28400 CX COMMON/DPY/GO,TOP,BOT
28500 CX DATA BB/260.0/,CC/3.5/,DD/1.43/,MX/512/
28600 C SET XGP TO 1245.0 FOR MARGIN IN XEROX COPIES
28700 CX22 GO TO 23
28800 C CHANGE ABOVE TO 'J6CL' IN DDT TO USE NEXT ITEMS.
28900 CX24 AA=CC-DD*ABS(A)/BB
29000 C USE THIS IN DDT TO DISTORT ITEMS. CC MUST BE > DD
29100 CX B=B*AA
29200 CX23 IF(IPLT)GO TO 2
29300 CX IF(JA.EQ.44)RETURN
29400 CC K=B
29500 CC IF(K.GT.ITOP)ITOP=B
29600 CC IF(K.LT.IBOT)IBOT=B
29700 CX IF(B.GT.TOP)TOP=B
29800 CX IF(B.LT.BOT)BOT=B
29900 CX6 RETURN
30000 CC2 IF(IPLT.EQ.-2)RETURN
30100 C RXGP SETS UP-DOWN POS. ON XEROX PAPER (FRACTIONAL POSITIONS POSSIBLE.)
30200 CC IF(IXRX.EQ.0)GO TO 9
30300 CC M=ROFF(RXGP-B*RHT)
30400 CC N=ROFF(XGP+A*DIS)
30500 CC GO TO 8
30600 CX2 M=ROFF(A*DIS)
30700 CX N=ROFF(B*RHT)
30800 CX8 CALL PLOT(M,N,L)
30900 CX END
31000
31100 SUBROUTINE PLTCMD(NOSET)
31200 COMMON/FRMT/F78F(1),FA1(1),FA5(1),ASK /OUTF/JJ
31300 DIMENSION NMS(15),RMOV1(15),RMOV2(15)
31400 COMMON /DL/RSIZ,SAVER,NAME /ALF/INP(72),ML
31500 COMMON R2,JE,CENTR,JB,RJQ(20),JQ(20)
31600 EQUIVALENCE (R5,RJQ(3)),(R6,RJQ(4)),(R7,RJQ(5)),(R4,RJQ(2))
31700 1,(R3,RJQ(1)),(I2,INP(2)),(R8,RJQ(6)),(R9,RJQ(7))
31800 C BE CAREFUL OF COMMON OVERLAPS WITH NOTWRT,ITMSUB,HOMER, ETC.
31900 DATA F78F(1)/'(78F)'/
32200
32300 IF(I2.NE.'X')GO TO 1
32400 I2=0
32500 C I2=X FIRST TIME THROUGH
32700 RMOV1(1)='Y'
32800 NAME=0
32900 14 KA=0
33000 3 KA=KA+1
33100 IF(MLL.EQ.0)GO TO 15
33200 K=K-2
33300 MLL=MLL-1
33400 IF(MLL.EQ.0)GO TO 10
33500 GO TO 31
33600 15 TYPE 2,KA
33700 ACCEPT 11,K,MLL,RSPC
33800 C TYPE LAST NAME, NUMBER FOR A SERIES, 2ND NUM FOR FIXED SPACE ".
33900 50 IF(K.NE.' ')GO TO 51
34000 IF(KA.NE.1)GO TO 10
34100 C DEFAULT NAME IS 'TMP 1'
34200 K='TMP'
34300 MLL=1
34400 51 IF(K.EQ.'99')GO TO 140
34500 C 99=BACKUP
34600 IF(K.NE.'NOSET')GO TO 31
34700 NOSET=-1
34800 C ACTIVATES ANTI-RESET IN MPRFAI.FAI
34900 GO TO 15
35000
35100 31 IF(LOOKF(K))GO TO 56
35200 C JUMP IF FILE FOUND
35300 TYPE 55
35400 GO TO 15
35500 55 FORMAT(' FILE NOT FOUND'/)
35600 11 FORMAT(A5,I,F)
35700 56 IF(MLL.LT.99)GO TO 560
35800 MLL=0
35900 561 K=K+2
36000 C TYPE 'AAAAA 99' TO FIND ALL IN 'AAAAx' SERIES AUTOMATICALLY
36100 MLL=MLL+1
36200 IF(LOOKF(K))GO TO 561
36300 C KEEPS GOING BACK IF FILES ARE FOUND
36400 K=K-2
36500 560 NMS(KA)=K
36600 IF(MLL.EQ.0)GO TO 5
36700 R8='Y'
36800 IF(RSPC.NE.0)R8=RSPC
36900 GO TO 21
37000 5 TYPE 8
37100 ACCEPT 11,R8
37200 IF(R8.EQ.'99')GO TO 15
37300 IF(R8.NE.'Y')R8=0
37400 IF(R8.EQ.0)REREAD F78F,R8
37500 C MOVE NUMBER CAN BE TYPED FOR 'MOVE UP'
37600 21 RMOV1(KA+1)=R8
37700 RMOV2(KA)=R8
37800 GO TO 3
37900 140 KA=KA-1
38000 GO TO 15
38100
38200 10 KB=KA-1
38300 IF(I3.NE.'G')GO TO 22
38400 RSIZ=1
38500 GO TO 222
38600 22 TYPE 9
38700 ACCEPT F78F,RSIZ,R9
38800 C SET R9 TO 1 FOR HEAVY STAFF LINES (FOR XGP MAINLY)
38900 IF(RSIZ.EQ.99)GO TO 5
39000 IF(RSIZ.EQ.0)RSIZ=1.
39100 TYPE 550
39200 ACCEPT 11,JJ
39300 IF(JJ.EQ.' ')JJ='PLT'
39400 550 FORMAT(' TYPE OUTPUT NAME - '$)
39500 222 KA=0
39600
39700 1 IF(NAME.NE.0)GO TO 12
39800 IF(KA.NE.KB)GO TO 13
39900 I2=-1
40000 RETURN
40100 C THE END OF THE DATA
40200 13 NAME=NMS(KA+1)
40300 TYPE 111,NAME
40400 RETURN
40500 12 KA=KA+1
40600 NAME=0
40700 R8=0
40800 R2=RSIZ
40900 R3=RSIZ
41000 C FOR FILLER. SIZES .LT. 1.6 = EVERY SCAN LINE, .LT. 2.6 = 2, ETC.
41100 R7=0
41200 R5=1
41300 R6=1
41400 IF(RMOV2(KA).NE.'Y')R7=RMOV2(KA)
41500 IF(RMOV1(KA).NE.0)R5=0
41600 IF(RMOV2(KA).NE.0)GO TO 77
41700 IF(R7.EQ.0)RETURN
41800 77 R6=0
41900 2 FORMAT(' TYPE FILE NAME',I2,1X$)
42000 8 FORMAT(' MOVE UP AT END? ',$)
42100 9 FORMAT(' SIZE FACTOR? ',$)
42200 111 FORMAT(1XA5/)
42300 END